﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引用命名空间, 调用平台API和非托管的资源需要用到
using System.Runtime.InteropServices;

namespace OnTheWay.Tool
{
    public class SystemInputInfo
    { 
        //声明WinAPI函数 GetTickCount，用于返回系统所运行的时间
        [DllImport("kernel32.dll")]
        private static extern int GetTickCount();

        //声明WinAPI函数 GetLastInputInfo，用于返回系统最后输入动作的时间
        [DllImport("user32.dll")]
        private static extern int GetLastInputInfo(
             ref LASTINPUTINFO plii);

        //定义一个 LastInputInfo 的结构，用于保存 GetLastInputInfo 返回的数据
        [StructLayout(LayoutKind.Sequential)]
        internal struct LASTINPUTINFO
        {
            [MarshalAs(UnmanagedType.U4)]
            public int cbSize;
            [MarshalAs(UnmanagedType.U4)]
            public int dwTime;
        }

        //获取闲置时间的方法体
        public static int GetIdleTime()
        {
            //初始化一个 LastInputInfo 结构体
            LASTINPUTINFO lastinputinfo = new LASTINPUTINFO();
            //LastInputInfo.cbSize 必须被设置为 LastInputInfo 结构的大小
            //LastInputInfo.dwTime 记录最后输入事件的时间,单位是豪秒
            lastinputinfo.cbSize = Marshal.SizeOf(lastinputinfo);
            lastinputinfo.dwTime = 0;
            if (GetLastInputInfo(ref lastinputinfo) != 0)
            {
                //GetTickCount() 返回系统启动后运行的时间,单位也是毫秒
                return (GetTickCount() - lastinputinfo.dwTime) / 1000;
            }
            return 0;
        }
    }
}
